package br.com.linkideias.model.command.ideiapcc;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.hibernate.Session;
import br.com.linkideias.model.bean.Categoria;
import br.com.linkideias.model.bean.Cidade;
import br.com.linkideias.model.bean.Empresa;
import br.com.linkideias.model.bean.Estatus;
import br.com.linkideias.model.bean.IdeiaPcc;
import br.com.linkideias.model.command.InterfaceCommand;
import br.com.linkideias.model.dao.HibernateDAO;
import br.com.linkideias.model.dao.InterfaceDAO;
import br.com.linkideias.util.HibernateUtil;

public class PesquisarIdeiaPcc implements InterfaceCommand {

	@Override
	public String execute(HttpServletRequest request,
			HttpServletResponse response) {
		IdeiaPcc ideiaPcc = new IdeiaPcc();
		Cidade cidade = new Cidade();
		List<Cidade> cidades;
		List<IdeiaPcc> ideiasPcc;
		Empresa empresa =  new Empresa();
		
		
		try {
			InterfaceDAO<IdeiaPcc> ideiaPccDAO = new HibernateDAO<IdeiaPcc>(IdeiaPcc.class, (Session) request.getAttribute(HibernateUtil.HIBERNATE_SESSION));
			InterfaceDAO<Estatus> estatusDAO = new HibernateDAO<Estatus>(Estatus.class, (Session)request.getAttribute(HibernateUtil.HIBERNATE_SESSION));
			InterfaceDAO<Categoria> categoriaDAO = new HibernateDAO<Categoria>(Categoria.class, (Session)request.getAttribute(HibernateUtil.HIBERNATE_SESSION));
			InterfaceDAO<Cidade> cidadeDAO = new HibernateDAO<Cidade>(Cidade.class, (Session)request.getAttribute(HibernateUtil.HIBERNATE_SESSION));
			
			BeanUtils.populate(ideiaPcc, request.getParameterMap());
			request.getSession().setAttribute("cidades", cidadeDAO.getBeans());
			request.getSession().setAttribute("estatuses", estatusDAO.getBeans());
			request.getSession().setAttribute("categorias", categoriaDAO.getBeans());
			cidades = cidadeDAO.getBeans();
			
			if(request.getParameter("criteriaDono") != null)
			{	
				empresa = (Empresa) request.getSession().getAttribute("empresa");
				ideiasPcc = ((HibernateDAO<IdeiaPcc>) ideiaPccDAO).getMinhasIdeiasPcc(empresa.getNome());
				request.setAttribute("ideiasPcc", ideiaPcc);				
				return "empresaIdeiaPccPesquisa.jsp";
			}else if (request.getMethod().equalsIgnoreCase("post"))
				{	
				ideiaPcc.setEstatus(estatusDAO.getBean(Integer.valueOf(request.getParameter("estatus_codigo"))));
				ideiaPcc.setCategoria(categoriaDAO.getBean(Integer.valueOf(request.getParameter("categoria_codigo"))));
				cidade = cidadeDAO.getBean(Integer.valueOf(request.getParameter("cidade_codigo")));
				
				ideiasPcc = ((HibernateDAO<IdeiaPcc>) ideiaPccDAO).getIdeiasPccPorCategoriaEstatusCidade(ideiaPcc, cidade, cidades);
				
				request.setAttribute("ideiasPcc", ideiaPcc);
				request.setAttribute("ideiasPcc", ideiasPcc);
				}
			
		} catch (IllegalAccessException e) {
			request.setAttribute("mensagem", "Problemas com a consulta.");
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			request.setAttribute("mensagem", "Problemas com a consulta.");
			e.printStackTrace();
		}
		return "empresaIdeiaTccPesquisa.jsp";
	}
}